package com.javalab._7thread._3Lock._1Synchronized;

import java.util.Random;

public class CommonData {
    private int value = 0;

    public synchronized int getValue() {
        return value;
    }

    /**
     * 如果不使用synchronized会产生线程安全问题导致结果会小于期望值
     */
    public synchronized void add() {
        // 先读取
        int temp = value;
        // 为了让实验效果更明显，随机休眠0-1毫秒
        try {
            Thread.sleep(new Random().nextInt(1));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 加1后回写
        value = temp + 1;
        System.out.println(String.format("线程%s 前%s 后%s",Thread.currentThread().getName(), temp, value));
    }


    public void add2() {
        // 同步代码块起到同样的效果
        synchronized (this) {
            add();
        }
    }
}
